
package main.old.new_2023.last.month_8;


import main.dataStruct.TreeNode;

import java.util.*;

/**
 * @Description: todo 199. 二叉树的右视图
 * 给定一个二叉树的 根节点 root，想象自己站在它的右侧，按照从顶部到底部的顺序，返回从右侧所能看到的节点值。
 *
 * todo 700. 二叉搜索树中的搜索
 * 给定二叉搜索树（BST）的根节点 root 和一个整数值 val。
 * 你需要在 BST 中找到节点值等于 val 的节点。 返回以该节点为根的子树。 如果节点不存在，则返回 null 。
 *
 *
 * @Author: Take-off
 * @Date: 1:00 PM 2023/6/
 * @Param:
 * @return:
 **/
public class Solution0823 {

    //二叉搜索树中的搜索
    public TreeNode searchBST(TreeNode root, int val) {
        if (root == null){
            return null;
        }
        while (root != null){
            if (root.val == val){
                return root;
            }else if (root.val  > val){
                root = root.left;
            }else {
                root = root.right;
            }
        }
        return null;
    }

    //二叉树的右视图
    public List<Integer> rightSideView(TreeNode root) {
        List<Integer> results = new ArrayList<>();
        if (root == null){
            return results;
        }
        Queue<TreeNode> treeNodes = new ArrayDeque<>();
        treeNodes.add(root);
        while (!treeNodes.isEmpty()){
            int size = treeNodes.size();
            while (size > 0){
                TreeNode poll = treeNodes.poll();
                size --;
                if (size == 0){
                    results.add(poll.val);
                }
                if (poll.left!= null){
                    treeNodes.offer(poll.left);
                }
                if (poll.right!= null){
                    treeNodes.offer(poll.right);
                }
            }
        }
        return results;
    }

}
